package com.huangwei;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;

public class DBTestDriver {

	public static void main(String[] args) {
		/*

		 * 新建 dynamic web project 

		 * 连接数据库：将驱动jar引入项目，将数据库驱动jar拷入项目的WebContent/WEB-INF/lib下即可

		 * 

		 * 

		 */
		try {
			// 1、注册驱动：需要使用数据库驱动类型、数据服务器访问地址、用户名、密码

			// 数据库驱动类型

			String dbDriverType = "oracle.jdbc.driver.OracleDriver";
			// 数据服务器访问地址

			/*

			 * jdbc:oracle:thin:@127.0.0.1:1521:dbname

			 * 中：127.0.0.1表示数据库服务器在本机；也可以使用localhost替代；还可以 ip地址、主机名

			 * 1521是oracle客户端连接的监听端口；

			 * dbname是oracle数据库的实例名，一般默认是实例名  ORCL

			 */
			String dbURL = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
			// 用户名

			String dbUser = "yuw2017";
			// 密码

			String dbPSW = "oracle";
			// 使用反射机制注册数据库服务驱动

			Class.forName(dbDriverType).newInstance();
			// 2、获取数据连接对象：connection

			Connection conn = DriverManager.getConnection(dbURL, dbUser, dbPSW);
			// 3、获取数据库操作对象：statement（preparedstatement）

			Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
					ResultSet.CONCUR_UPDATABLE);
			// 4、组织数据操作sql语句

			String strSql = "select * from dept";
			// 5、执行数据操作处理

			ResultSet rs = st.executeQuery(strSql);
			// 6、根据数据操作结果进行业务逻辑处理

			// 遍历结果集显示查询结果

			while (rs != null && rs.next()) {
				// 使用get方法获取字段内容

				System.out.print("第一列：" + rs.getObject(1));
				System.out.println(" DEPARTMENT_NAME: " + rs.getObject("DEPARTMENT_NAME"));
			}
			
			// 将光标放到结果集的最前面（第一行之前）,在oracle中需要在创建Statement时设置两个属性值；

			rs.beforeFirst();
			System.out.println("-----------------");
			// 获取与列相关的信息

			ResultSetMetaData rsmd = rs.getMetaData();
			// 获取查询结果集的列数

			int colCount = rsmd.getColumnCount();
			while (rs != null && rs.next()) {
				// 使用for循环输出当前结果集中当前行中所有的列信息

				for(int i =1;i<=colCount;i++){
					System.out.print("\t"+rsmd.getColumnLabel(i) +"-"+rs.getObject(rsmd.getColumnLabel(i)));
				}
				System.out.println();
			}
			// 7、关闭资源

			if (rs != null) {
				rs.close();
			}
			if (st != null) {
				st.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (Exception e) {
			// 数据库连接处理异常

			System.out.println("Oracle-Jdbc:数据库连接异常");
			e.printStackTrace();
		}

	}

}
